home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 076-100 / disk_087 / elib / readme < prev    next >
Text File  |  1992-05-06  |  3KB  |  60 lines

  1.  
  2. Notes on Mylib: amiga exec library compatible with small model Aztec-C.
  3.  
  4.         jimm mackraz -- october 28, 1986
  5.  
  6.     [Apr 24, 1987:
  7.      the archive includes a file 'elib' which must be copied to
  8.      'LIBS:mylib.library' before the test program will run.]
  9.  
  10.     Most of the work here is because Aztec uses d2, d3 (and others, according
  11.     to the manual) as scratch registers.  This means that crt0.asm (the
  12.     C startup code) can't be called as is by OpenLibrary(), so an AutoInit
  13.     (RomTag) approach is used.
  14.  
  15.     Note also that all entry points to the library must save and restore
  16.     registers (unless you can be sure that they won't be trashed).
  17.  
  18.     Note also that arguments are passed to the library in registers, even
  19.     though this entails yanking them off the stack first and pushing them
  20.     back on later (and the compiler probably just puts them back into
  21.     registers itself).  This is the Amiga convention, done so that
  22.     assembler applications calling assembler library functions are optimized,
  23.     and to be compiler/linker independent.  We strongly recommend the
  24.     continuation of this practice.  If you want better performance, write
  25.     the library functions in assembler, and take the arguments from registers
  26.     directly.
  27.  
  28.     The example here consists of several files, some linked together to
  29.     create the library, some to create the example calling program (see
  30.     also the makefile).
  31.  
  32.     Library:
  33.         elib.c -- c-code for initialization and library functions
  34.         rtag.asm -- data structure (but in code segment) for romtag
  35.         funky.asm -- modified aztec crt0.asm.  saves registers, sets
  36.             up A4 (and for geta4()) calls my Init routine, restores.
  37.         libface.asm -- entry points for library functions: each saves
  38.             registers, sets up A4, pushes arguments on stack, calls
  39.             C-routine, fixes stack, restores regs.
  40.  
  41.     Calling Program:
  42.         t.c -- opens library, calls its functions, closes library
  43.         liblink.asm -- interface for C calls to library calls.  Note that
  44.             the symbol libbase in t.c must be named exactly that.
  45.  
  46.     To add a new function written in C to this library, one must:
  47.         -write the C-code for the function
  48.         -write the library side interface routine in libface.asm
  49.         -write the C application side interface in liblink.asm
  50.         Note the simplicity afforded by declaring all integer parameters
  51.         and return values as LONG.
  52.  
  53.     To add a new function written in assembler, you needn't do a library
  54.     side interface which pushes arguments on the stack, nor need you save
  55.     more registers than you are explicity using.  Note, though, that
  56.     a4 must be setup using geta4() (save it first!) to do any small model
  57.     references, and calling any Aztec function might require that you
  58.     save registers.
  59.  
  60.